/**
*策略模式
*定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。
*本模式使得算法可独立于使用它的客户变化
*/

//利用多态实现策略模式

#include <iostream>
using namespace std;

class Strategy
{
public:		//一定要public
	virtual void run() = 0;
};

class StrategyA : public Strategy
{
public:
	virtual void run()
	{
		cout << "StrategyA" << endl;
	}
};

class StrategyB : public Strategy
{
public:
	virtual void run()
	{
		cout << "StrategyB" << endl;
	}
};

int main()
{
	Strategy *s;
	s = new StrategyA();
	s->run();
	s = new StrategyB();
	s->run();
};

//class Context
//{
//public:
//	//注意：抽象类不能实例化，所以声明为引用。可以将子类对象传递给抽象类引用。
//	Context(Strategy& strtgy)
//	{
//		this->strtgy = &strtgy;
//	}
//	void operation()
//	{
//		strtgy->fun();
//	}
//private:
//	Strategy* strtgy;
//};
//
//void main()
//{
//	StrategyA strtgy1;
//	Context cntxt1(strtgy1);
//	cntxt1.operation();
//
//	StrategyB strtgy2;
//	Context cntxt2(strtgy2);
//	cntxt2.operation();
//
//	system("pause");
//}